Maîtriser le Web Scraping pour la collecte de données

Atelier ICHEC

Aurélien Goutsmedt

16 décembre 2026

1 Objectifs de la formation

Objectifs de la formation

  • Donner une compréhension de base de ce qu’est le web scraping et de ce qu’il permet
  • Discuter des enjeux éthiques (et juridiques) liés au web scraping
  • Proposer une feuille de route pour apprendre à pratiquer le web scraping en R
  • Fournir des bouts de code et des conseils pratiques
  • Mise en pratique: exercices par niveau de difficulté

Pré-requis

  • Besoin de R et RStudio (ou Positron) pour reproduire les codes et suivre les exercices
  • Ces slides sont construites à partir d’un fichier .qmd (quarto) — tout le code utilisé dans ces slides peut être exécuté dans RStudio/Positron
# Ces lignes doivent être exécutées en amont si vous souhaitez installer tous les paquets

# pacman sera utilisé pour installer (si nécessaire) et charger les paquets
if(length(grep("pacman", installed.packages())) == 0) install.packages("pacman") # vérifie si installé
library(pacman)

# Installation des paquets nécessaires
p_load(tidyverse, # suite de base
       glue, # utile pour construire des chaînes (notamment pour les url)
       scico, # palettes de couleurs
       patchwork, # pour juxtaposer des graphiques
       DT) # pour afficher des tables html

2 Qu’est-ce que le web scraping

Qu’est-ce que le web scraping ?

  • Le web scraping est une méthode pour extraire automatiquement des données disponibles sur le World Wide Web
  • Le World Wide Web, ou «Web», est un réseau de sites web (documents en ligne codés en html et css)
  • Un web scraper est un programme, par exemple en R, qui lit automatiquement la structure html d’un site et en extrait le contenu pertinent (texte, liens, tableaux)
    • Pas besoin de comprendre parfaitement html et css
  • Utile quand il y a beaucoup de pages à scraper

Qu’est-ce que HTML et CSS ?

API vs. web scraping

  • API (Application Programming Interface) offre un moyen structuré et prévisible de récupérer des données depuis un service. C’est comme commander dans un menu : vous demandez des données spécifiques et vous les recevez dans un format structuré
  • Web scraping = extraction programmée de données depuis le HTML d’une page web. Comparable à copier manuellement des informations dans un livre : vous décidez quoi extraire et comment le faire

API vs. web scraping

  • Contrôle et structure : les API offrent un accès structuré aux données, tandis que le scraping nécessite d’extraire les données du code HTML et souvent de les nettoyer soi-même.
  • Facilité d’utilisation : utiliser une API peut être plus simple puisque conçue pour l’accès aux données. Le scraping demande de gérer les changements HTML et le code est plus susceptible de ne plus marcher avec le temps.
  • Disponibilité : tous les sites n’offrent pas d’API, rendant le scraping parfois nécessaire.
  • Limitations et autorisation : les API imposent souvent des limites de taux et peuvent exiger une authentification ; le scraping peut contourner ces limites mais peut violer les conditions d’utilisation.

Oubliez le big data, le small data est partout !

  • De nombreuses possibilités de données à collecter :
    • documents officiels/discours/communications diverses
    • agendas et réunions
    • listes de personnels ou d’experts dans des commissions
    • lois ou négociations
  • Pour prendre en compte l’évolution des pages web dans le temps, on peut utiliser Internet Archive

Construire des bases de données

Implique une série de questions :

  • Quelle est votre question de recherche et quelles données sont appropriées pour y répondre ?
  • Quelle quantité de données collecter ?
    • compromis entre collecter beaucoup d’informations (ce qui prend plus de temps) et risquer d’en manquer plus tard
  • Comment scraper les données ? Sous quel format ?
    • interaction entre extraire proprement dès le départ ou nettoyer ensuite
  • Que perd-on en automatisant par rapport au travail manuel ? (ou inversement)
  • Comment analyser/comprendre ces nouvelles données ?
  • Comment mettre à jour la base de données ?

3 L’éthique du web scraping

Considérations éthiques

  • Considérations juridiques : toutes les données ne sont pas libres de scraping. Les conditions d’utilisation des sites peuvent interdire explicitement le scraping et, dans certaines juridictions, le scraping peut avoir des implications légales
    • Ce qui est «interdit» par un site n’est pas nécessairement «illégal»
  • Problèmes de vie privée : scraper des données personnelles peut poser des problèmes de confidentialité et être soumis à des réglementations comme le RGPD en Europe
  • Performance du site : un scraping agressif (trop de requêtes en peu de temps) peut impacter la performance d’un site

Questions en jeu (Krotov, Johnson, et Silva 2020)

Krotov, Johnson, et Silva (2020)

Krotov, Johnson, et Silva (2020)

Pratiques éthiques

  • Respecter le robots.txt : ce fichier indique les parties à ne pas scraper
  • Limiter le rythme des requêtes : faire des pauses raisonnables pour ne pas surcharger le serveur
  • User-Agent : s’identifier pour que le propriétaire comprenne la nature du trafic
  • Usage des données : considérer les implications éthiques de l’utilisation des données scrapées, respecter la vie privée

Pratiques éthiques (suite)

  • Mes actions peuvent-elles nuire à des individus, organisations ou communautés ?

  • Que puis-je faire pour réduire ce risque de préjudice non intentionnel ?

Si les données sont publiques, non personnelles et factuelles, c’est probablement acceptable

4 Comment scraper un site ?

Qu’est-ce que R ?

  • Langage de programmation créé à la fin des années 1990 pour le calcul statistique
  • Libre et open source
  • Enrichi par de nombreux paquets (packages)
  • Généralement utilisé via l’environnement RStudio (mais aussi Positron désormais)

Concepts de base en R

  • objet : une «boîte» à laquelle on donne un nom et dans laquelle on place des choses
  • data frame (type d’objet) : comparable à un tableur
firstnames <- c("Anna", "Laura", "Lise")
firstnames
[1] "Anna"  "Laura" "Lise" 
ages <- c(26,28,25)
ages
[1] 26 28 25
discipline <- c("maths", "sociology", "law")
discipline
[1] "maths"     "sociology" "law"      
my_data <- data.frame(firstnames, ages, discipline)
my_data
  firstnames ages discipline
1       Anna   26      maths
2      Laura   28  sociology
3       Lise   25        law

Concepts de base en R (suite)

  • fonction: bloc de code prenant des entrées et retournant un résultat. On peut définir ses propres fonctions, beaucoup existent déjà.
length(firstnames)
[1] 3
  • package: contient essentiellement des fonctions
library(stringr)
str_detect(firstnames, "Anna")
[1]  TRUE FALSE FALSE

Paquets utiles pour le webscraping en R

  • rvest: navigation et extraction depuis le HTML
  • polite: étiquette responsable pour le scraping (politesse)
  • RSelenium: interaction avec le site via un navigateur automatisé
p_load(rvest, # scraping et manipulation du HTML
       polite, # scraping éthique
       RSelenium) # scraping en interagissant avec les sites

Le rôle des «sitemaps»

  • Sitemap : informe les moteurs de recherche des URLs disponibles pour le crawling
    • Permet de comprendre la structure du site
    • Trouver où se situe l’information à extraire

Être respectueux du site

session <- polite::bow(bis_website_path, 
                       user_agent = "polite R package - academic training by Aurélien Goutsmedt (aurelien.goutsmedt[at]ichec.be)")
cat(session$robotstxt$text)
#Format is:
#       User-agent: <name of spider>
#       Disallow: <nothing> | <path>
#-------------------------------------------

User-Agent: *
Disallow: /dcms
Disallow: /metrics/
Disallow: /search/
Disallow: /staff.htm
Disallow: /embargo/
Disallow: /app/
Disallow: /goto.htm
Disallow: /login
#Disallow: /cbhub
Disallow: /cbhub/goto.htm
Disallow: /doclist/
# Committee comment letters
Disallow: /publ/bcbs*/
Disallow: /bcbs/ca/
Disallow: /bcbs/commentletters/
Disallow: /*/publ/comments/
# Hide the Basel Framework standards, only chapters should be indexed.
Disallow: /basel_framework/standard/

Sitemap: https://www.bis.org/sitemap.xml
session$robotstxt$sitemap
    field useragent                           value
1 Sitemap         * https://www.bis.org/sitemap.xml

Utiliser le sitemap

Code
# Cette fonction va sur une page sitemap et extrait toutes les urls trouvées
extract_url_from_sitemap <- function(url, delay = 1) {
  urls <- read_html(url) %>%
    html_elements(xpath = ".//loc") %>%
    html_text()
  Sys.sleep(delay) # Pause pour éviter de surcharger le site
  return(urls)
}

document_pages <- extract_url_from_sitemap(session$robotstxt$sitemap$value) %>%
  .[str_detect(., "documents")] # on conserve seulement les URLs des documents

# insistently permet de réessayer en cas d'échec de chargement
# Utile avec des pages lentes telles que les sitemaps
insistently_extract_url <- insistently(
  extract_url_from_sitemap,
  rate = rate_backoff(max_times = 5)
)

bis_pages <- map(
  document_pages[1:5], # on montre le code seulement pour les cinq premières années
  ~ insistently_extract_url(url = ., delay = session$delay)
)

bis_pages <- tibble(
  year = str_extract(document_pages[1:5], "\\d{4}"),
  urls = bis_pages
) %>%
  unnest(urls)

Les étapes clés du web scraping

Plusieurs façons de faire, mais le scénario de base est :

  1. Lire le code html de la page (accès direct via une URL ou après interaction via RSelenium).

  2. Extraire des éléments spécifiques avec des sélecteurs.

  3. Lire le texte contenu dans ces éléments.

  4. Stocker les informations récupérées dans un data frame.

Scraper un discours BIS avec rvest

Scraper une page : utiliser un helper

  • Des extensions dans le navigateur aident à localiser les éléments d’une page
    • XPath est le chemin vers une partie spécifique de la page
    • CSS selectors servent d’abord au style mais permettent aussi de cibler des éléments dans le HTML
  • Outils typiques : ScrapeMate et SelectorGadget

Scraper un discours BIS avec rvest

Scraper un discours BIS avec rvest

url_speech <- "https://www.bis.org/review/r251209e.htm"
page <- read_html(url_speech)
print(page)
{html_document}
<html class="no-js" lang="en" xml:lang="en" xmlns="http://www.w3.org/1999/xhtml">
[1] <head>\n<meta content="IE=edge" http-equiv="X-UA-Compatible">\n<meta cont ...
[2] <body>\n<div class="dt tagwidth" id="body">\n<div id="bispage">\n<noscrip ...
page %>% 
  html_element("h1") %>%
  html_text()
[1] "Joachim Nagel: AI and the future of central banking"
page %>% 
  html_element("#extratitle-div p:nth-child(1)") %>% 
  html_text()
[1] "Welcome address by Dr Joachim Nagel, President of the Deutsche Bundesbank, at the conference \"Artificial Intelligence and the future of central banking\", jointly hosted by SUERF ( The European Money and Finance Forum ) and the Deutsche Bundesbank, Frankfurt am Main, 9 December 2025."

Scraper un discours BIS avec rvest

page %>% 
  html_elements(".Reden") %>% 
  html_text
 [1] "Ladies and gentlemen, dear colleagues,"                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   
 [2] "It is a pleasure and an honour to welcome you today to the conference on \"Artificial Intelligence and the Future of Central Banking\", jointly hosted by SUERF – The European Money and Finance Forum – and the Deutsche Bundesbank."                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    
 [3] "I am pleased to see so many people here in the room with us in Frankfurt today. And it is wonderful that there are so many participants joining us virtually, too. This conference gives us the chance to discuss the importance of artificial intelligence (AI) for central banking and the wider economy. I would therefore especially like to thank the organisers of this conference, the speakers, and the participants in the policy panel. Thank you for making this gathering possible and for drawing up such an exciting agenda. "                                                                                                                                                                              
 [4] "The subject of today's conference is both topical and important. We are all aware that we are living and working in a period of change. We as central bankers are committed to fulfilling our mandate and performing our tasks in this challenging environment. Artificial intelligence offers us great opportunities, but it poses challenges, too. I therefore welcome today's event with open arms, as it will allow us to exchange ideas and perspectives on both."                                                                                                                                                                                                                                                   
 [5] "At the Bundesbank, we develop and use different AI applications that support employees in a wide range of tasks. For example, we have released a platform enabling staff throughout our institution to configure text-based intelligent assistants (which we call TIAs) for their daily work. These TIAs can even be used to process confidential data. A second Bundesbank platform uses natural language processing (NLP), allowing large volumes of documents to be pre-processed and analysed."                                                                                                                                                                                                                       
 [6] "Yet another example is MILA the Monetary-Intelligent Language Agent model, which we set up to analyse central bank communication with the help of generative AI.1 When given my remarks to analyse, this model concluded that the brief speech I am giving today exhibits something you will surely also notice for yourselves: optimism about how we can use the transformative potential of AI. I have both optimism and confidence: confidence that we will also master the challenges posed by the transformative power of AI for central banks and the economy in general. I would therefore like to use the next few minutes to shed light on both the opportunities afforded by AI and the challenges it presents."
 [7] "The transformative potential of AI arises from different dimensions and promises of this technology. We expect artificial intelligence to improve our business processes. It also represents an extension of our analytical toolkit. I would now like to focus on two of the aspects we will be taking a closer look at in today's conference."                                                                                                                                                                                                                                                                                                                                                                           
 [8] "The first of these is the use of AI for enhanced forecasting and structural analysis: AI offers tools to process vast datasets. These can help, amongst other things, to detect previously unseen patterns. But they can also improve predictive accuracy. For example, machine learning may help to anticipate inflationary pressures, shifts in labour markets, or structural breaks in the economy more swiftly than traditional models allow."                                                                                                                                                                                                                                                                        
 [9] "Applications based on machine learning at the Bundesbank are, inter alia, used to model inflation, interest rates and fiscal expenditures as well as loan and trade volumes. Our experience shows that machine learning approaches are not always superior to traditional ones. Hence, I would like to emphasise that AI complements the work of our employees as an additional tool. It does not replace expert knowledge."                                                                                                                                                                                                                                                                                              
[10] "The second aspect I would like to mention is the following: AI is not only a means to better understand the macroeconomy. It is itself becoming a driver of macroeconomic dynamics. It can, amongst other things, affect productivity, labour markets, and capital formation. For example, it will impact on the diffusion of innovation and may thus affect potential growth."                                                                                                                                                                                                                                                                                                                                           
[11] "The Bundesbank Survey of firms (BOP-F) for the second quarter of 2025 reflected the impact of generative AI on the world of work.2 A majority of firms that already employ generative AI expected that its use would improve their profitability, customer satisfaction and employee satisfaction. For the year 2024, around one-half of the firms that had already employed AI by that time reported that the use of generative AI increased their productivity. "                                                                                                                                                                                                                                                       
[12] "However, expert opinions on the magnitude of AI's impact on productivity vary greatly. Understanding such forces and dynamics is crucial for central banks, as they assess the medium-term economic outlook, structural change, and the transmission of monetary policy."                                                                                                                                                                                                                                                                                                                                                                                                                                                 
[13] "Colleagues at the Bank for International Settlements have been looking more closely at the use of AI applications in central banking.3 Their findings show that central banks have been early adopters of AI and machine learning techniques for important tasks.4 At the same time, the great potential of AI poses several challenges for central banks. Let me explain this again using the two aspects I focused on before. "                                                                                                                                                                                                                                                                                         
[14] "First, it is of crucial importance that models are reliable and that they can be interpreted properly. Advanced AI methods are sometimes regarded as \"black boxes\". This is because it can be more difficult to fully understand how they achieve their output compared to traditional approaches. However, for central banks, transparency and credibility are key. Both are crucial in terms of how central banks work and how they communicate with markets and the public. It is therefore important to invest in explainable AI methods – some of which we will see in today's presentations."                                                                                                                     
[15] "The second issue concerns the challenges presented by the economic implications of AI. The transformative power of AI might foster structural changes. Thus, monitoring the impact of AI in its multiple dimensions and from different perspectives is crucial. This is challenging because AI is progressing swiftly, and its macroeconomic impact might change rapidly. "                                                                                                                                                                                                                                                                                                                                               
[16] "At the current juncture, we are seeing many firms in the euro area still using AI on a limited or experimental basis.5 Moreover, in many occupations, AI is currently mainly supporting employees in various tasks, rather than fully taking over their jobs. However, as we have seen, the capabilities of AI are expanding quickly. And so are its potential implications for labour markets and monetary policy transmission. "                                                                                                                                                                                                                                                                                        
[17] "We must proceed with caution and take care to continually update our evaluation of the impact of AI. To do so, we require, inter alia, information on the use of AI that is representative and comparable across countries. Such data are scarce, however. In view of this, the Bundesbank, Banca d'Italia and Banco d'España are working together on harmonising questions on AI in their representative firm surveys."                                                                                                                                                                                                                                                                                                  
[18] "To sum up, I hope I have given you some insight into how we at the Bundesbank are open to new technologies, how we try to leverage their potential and how we discuss their advantages and disadvantages. "                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               
[19] "Today gives us the opportunity to share advanced research and central banking practices with regard to AI, machine learning, non-traditional data and macroeconomic dynamics. There will be room for thoughtful dialogue on how the work of central banks needs to evolve in light of the advent of AI. And there will be room for building networks. Over the next few hours, you will probably challenge assumptions, perhaps confront blind spots and – as I very much hope – lay the basis for future collaboration."                                                                                                                                                                                                 
[20] "Let me close with a few personal reflections. Being open to innovation is not just about technology – it's also about mindset and the exchange of information and ideas. I am proud to be part of a central bank community that embraces both innovation and an open exchange about how to apply it best. This conference provides a forum for all of the above, so let's take full advantage of the opportunity!"                                                                                                                                                                                                                                                                                                        
[21] "While we discuss AI's technical and economic dimensions, though, let us not forget the broader societal dimension: technology should ultimately serve people. The same holds for us as central banks: We should use AI to serve the public interest by fulfilling our mandate. This goal and our commitment to it remain as important as ever. "                                                                                                                                                                                                                                                                                                                                                                          
[22] "Thank you very much for your attention. "                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 
[23] "1 Deutsche Bundesbank (2025), Monetary policy communication according to artificial intelligence, Monthly Report, March 2025."                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            
[24] "2 Deutsche Bundesbank (2025), Survey of firms (BOP-F), Q2 2025: Impact of generative AI on the world of work."                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            
[25] "3 Bank for International Settlements (2025), The use of artificial intelligence for policy purposes, Report submitted to the G20 Finance Ministers and Central Bank Governors, October 2025."                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             
[26] "4 Araujo, D., S. Doerr, L. Gambacorta and B. Tissot (2024), Artificial intelligence in central banking, BIS Bulletin, No 84, 23 January 2024."                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            
[27] "5 Deutsche Bundesbank (2025), Use of artificial intelligence – a European comparison, Monthly Report, May 2025. "                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         

Comprendre les URLs du BIS

day <- "01"
month <- "12"
year <- 2025 # on veut regarder tous les discours depuis le 1er octobre 2024
page <- 2
# Le paquet glue permet d'insérer des variables dans une chaîne
url_second_page <- glue("https://www.bis.org/cbspeeches/index.htm?fromDate={day}%2F{month}%2F{year}&cbspeeches_page={page}&cbspeeches_page_length=25")
print(url_second_page)
https://www.bis.org/cbspeeches/index.htm?fromDate=01%2F12%2F2025&cbspeeches_page=2&cbspeeches_page_length=25

Scraper la page de résultat : mixer rvest et RSelenium

# Lancer Selenium pour aller sur le site BIS
driver <- rsDriver(browser = "firefox", # peut aussi être "chrome"
                   chromever = NULL,
                   port = 4444L,
                   check = FALSE) 
remote_driver <- driver[["client"]]

Scraper une page : mixer rvest et RSelenium

remote_driver$navigate(url_second_page)
Sys.sleep(session$delay)


element <- remote_driver$findElement("css selector", ".item_date")
element$getElementText()[[1]]
[1] "08 Dec 2025"


elements <- remote_driver$findElements("css selector", ".item_date")
length(elements)
[1] 25
elements[[25]]$getElementText()[[1]]
[1] "04 Dec 2025"

Scraper une page

Code
data_page <- tibble(date = remote_driver$findElements("css selector", ".item_date") %>% 
                      map_chr(., ~.$getElementText()[[1]]),
                    info = remote_driver$findElements("css selector", ".item_date+ td") %>% 
                      map_chr(., ~.$getElementText()[[1]]),
                    url = remote_driver$findElements("css selector", ".dark") %>% 
                      map_chr(., ~.$getElementAttribute("href")[[1]])) %>% 
  separate(info, c("title", "description", "speaker"), "\n")

Scraper toutes les pages

starting_url <- glue("https://www.bis.org/cbspeeches/index.htm?fromDate={day}%2F{month}%2F{year}&cbspeeches_page=1&cbspeeches_page_length=25")
remote_driver$navigate(starting_url)

# Extraire le nombre total de pages
nb_pages <- remote_driver$findElement("css selector", ".pageof")$getElementText()[[1]] %>%
  str_remove_all("Page 1 of ") %>%
  as.integer()

# créer une liste pour stocker progressivement les infos
metadata <- vector(mode = "list", length = nb_pages)

for(page in 1:nb_pages){
  url <- glue("https://www.bis.org/cbspeeches/index.htm?fromDate={day}%2F{month}%2F{year}&cbspeeches_page={page}&cbspeeches_page_length=25")
  remote_driver$navigate(url)
  nod <- nod(session, url) # présentation polie à la nouvelle page
  Sys.sleep(session$delay) # respecter le délai défini par polite

  metadata[[page]] <- tibble(date = remote_driver$findElements("css selector", ".item_date") %>% 
                            map_chr(., ~.$getElementText()[[1]]),
                          info = remote_driver$findElements("css selector", ".item_date+ td") %>% 
                            map_chr(., ~.$getElementText()[[1]]),
                          url = remote_driver$findElements("css selector", ".dark") %>% 
                            map_chr(., ~.$getElementAttribute("href")[[1]])) 
}

metadata <- bind_rows(metadata) %>% 
  separate(info, c("title", "description", "speaker"), "\n")
driver$server$stop() # on ferme le bot

5 Ressources

Ressources utiles

Références

6 Exercices

Exercices

Exercice facile

  • Objectif : Scraper et analyser les résultats des élections générales britanniques 2024 depuis le site de la BBC.
  • Objectifs d’analyse :
    • Compter le nombre de partis avec au moins un siège.
    • Déterminer quels partis ont gagné ou perdu par rapport à l’élection précédente.
    • Calculer et visualiser le nombre moyen de voix par siège pour chaque parti ayant au moins un siège.
    • Comparer les résultats pour l’ensemble du Royaume-Uni vs. l’Angleterre.

Approche (exercice facile)

  1. Utiliser rvest et polite pour récupérer les noms de partis, sièges, voix et changements de sièges depuis la page BBC.

  2. Organiser les données dans un data frame et nettoyer (convertir sièges et voix en numériques, retirer symboles inutiles).

  3. Analyses :

  • Compter les partis avec au moins un siège.
  • Ordonner les partis selon gains/pertes de sièges.
  • Calculer votes par siège pour chaque parti avec au moins un siège.
  • Tracer les votes par siège pour ces partis.
  1. Répéter le processus pour l’Angleterre ([https://www.bbc.com/news/election/2024/uk/regions/E92000001]) puis comparer.

Exercice moyen — partie 1

Vous voulez savoir ce qu’il est advenu des dossiers législatifs prioritaires de l’UE en 2023-2024

  • 1. Scraper les informations de base

Nous allons lister toutes les procédures pertinentes. Dans l’UE, chaque proposition législative a un numéro de procédure, incluant ‹COD›.

Allez sur la page listant les fichiers législatifs prioritaires 2023-24.

Vous devez scraper cette page pour obtenir un data frame contenant :

  • le titre
  • le numéro
  • l’url vers la page spécifique de chaque procédure

Vérifiez une ou deux liaisons :

  • pouvez-vous les ouvrir dans un navigateur ?
  • Quelque chose manque-t-il dans l’URL ? Comment corriger cela ?

Astuce : utilisez paste().

Exercice moyen — partie 2

  • 2. Filtrer uniquement les procédures d’intérêt

Maintenant que vous avez listé les noms et les liens, créez un data frame ne contenant que les procédures avec ‹COD› dans leur référence.

Astuce : str_detect() de stringr.

Exercice moyen — partie 3

  • 3. Scraper une page unique Prenez l’URL : https://oeil.secure.europarl.europa.eu/oeil/popups/ficheprocedure.do?reference=2021/0433(CNS)&l=en

Dans un data frame (une ligne, trois colonnes), scraper :

  • le statut de la procédure (à quel stade elle en est)

  • la date de publication de la proposition législative

  • la date de décision du Parlement européen

Astuce : pour les dates, sélectionnez d’abord toutes les dates, puis les noms des événements correspondants, enfin gardez l’événement d’intérêt avec grepl() (par ex. «proposal»).

Exercice moyen — partie 4

  • 4. Écrire une fonction Écrire une fonction généralisant le scraping de la partie 3. Pour chaque URL, la fonction doit récupérer les trois informations ci-dessus. Appliquer la fonction sur votre liste d’URLs et stocker les résultats dans un data frame contenant aussi le numéro de procédure et l’URL.

Astuce : tibble(), return(), lapply().

Certaines informations peuvent manquer sur certaines pages. Utilisez length() pour vérifier et écrire «To check» si non trouvé.

Exercice moyen — partie 5

5. Explorer les données

  • Durée : calculer le nombre de jours entre la proposition et la décision du PE dans une nouvelle colonne.

Astuce : convertir en type date (chercher la fonction appropriée).

  • Données manquantes : que faire si la date de décision manque ? Attention au calcul de la durée.

  • Cas particuliers : chercher la procédure la plus longue ; quand a-t-elle commencé ?

Exercice difficile

Scraper les «occasional papers» de la BCE

  • Objectif : Créer une base avec les titres, auteurs, résumés, codes JEL, URLs et dates de publication de tous les «occasional papers» de la BCE. Trouver les mots/expressions les plus récurrents dans les résumés et titres.
  • Approche : inspecter la page et sa structure.
    • La page se charge-t-elle complètement à l’accès ? Sinon, il faudra scroller.
    • L’abstract ou les codes JEL sont-ils visibles ? Sinon, il faudra cliquer.
    • Vous devrez probablement utiliser RSelenium.
  • Gérer la structure particulière de certaines infos : par ex. extraire tous les auteurs individuellement.
  • Astuce : vérifiez toujours que vous avez le bon nombre d’éléments extraits.
Krotov, Vlad, Leigh Johnson, et Leiser Silva. 2020. « Tutorial: Legality and Ethics of Web Scraping ».